package com.chj.chuji.tijie09;

//https://blog.csdn.net/elma_tww/article/details/86538836
public class Integerdivision {
	public static void main(String[] args) {

		int n = 7;
		int k = 3;
		int[][] dp = new int[n + 1][k + 1];
		dp[0][0] = 1;
		// i的取值范围是1~n（不能超过给定的整数）
		for (int i = 1; i <= n; i++) {
			// j的范围是1~k（不能超过需要划分的份数）
			for (int j = 1; j <= k; j++) {
				// 划分的分数要小于等于该数本身
				if (i >= j)
					// 动态转移方程
					dp[i][j] = dp[i - j][j] + dp[i - 1][j - 1];
			}
		}

		System.out.println(dp[n][k]);
	}

//	int n,k;
//	cout << "输入整数n和划分的份数k:";
//	cin >> n >> k;
//	int dp[201][7];
//	//全部初始化为0
//	memset(dp,0,sizeof(dp));
//	//对于dp[0][0]作特殊处理（为了后面的动态转移方程能够起作用）
//	dp[0][0] = 1;
//	int i,j;
//	//i的取值范围是1~n（不能超过给定的整数）
//	for(i=1;i<=n;i++)
//		//j的范围是1~k（不能超过需要划分的份数）
//		for(j=1;j<=k;j++)
//		{
//			//划分的分数要小于等于该数本身
//			if(i>=j)
//				//动态转移方程
//				dp[i][j] = dp[i-j][j] + dp[i-1][j-1];
//		}
//	cout << "共有" << dp[n][k] << "种分法" << endl;
//	system("pause");
//	return 0;

}
